package com.huige.wiki.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.huige.wiki.entity.Category;
import com.huige.wiki.entity.CategoryExample;
import com.huige.wiki.mapper.CategoryMapper;
import com.huige.wiki.req.CategoryQueryReq;
import com.huige.wiki.req.CategorySaveReq;
import com.huige.wiki.resp.CategoryQueryResp;
import com.huige.wiki.resp.PageResp;
import com.huige.wiki.service.CategoryService;
import com.huige.wiki.util.CopyUtil;
import com.huige.wiki.util.SnowFlake;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@Slf4j
public class CategoryServiceImpl implements CategoryService {

    @Autowired
    CategoryMapper categoryMapper;

    @Autowired
    SnowFlake snowFlake;  // 雪花算法工具类

    /**
     * 分页查询分类数据。暂时用不到，分类展示树形表格，要把所有数据都返回
     * @param categoryQueryReq
     * @return
     */
    @Override
    public PageResp<CategoryQueryResp> list(CategoryQueryReq categoryQueryReq) {
        // 创建一个条件查询
        CategoryExample categoryExample = new CategoryExample();
        CategoryExample.Criteria criteria = categoryExample.createCriteria();
        // 设置排序:按sort字段升序排序
        categoryExample.setOrderByClause("sort asc");
//        if(!ObjectUtils.isEmpty(categoryQueryReq.getName())){
//            criteria.andNameLike("%"+categoryQueryReq.getName()+"%");
//        }
//        if(!ObjectUtils.isEmpty(categoryQueryReq.getCategoryId2())){
//            criteria.andCategory2IdEqualTo(categoryQueryReq.getCategoryId2());
//        }
        //设置分页参数
        PageHelper.startPage(categoryQueryReq.getPage(), categoryQueryReq.getSize());
        List<Category> categorys = categoryMapper.selectByExample(categoryExample);
        // 将查询结果封装到PageInfo对象中
        PageInfo<Category> categoryPageInfo = new PageInfo<>(categorys);
        // 将Category对象列表转换为CategoryQueryResp对象列表
        List<CategoryQueryResp> list = CopyUtil.copyList(categorys, CategoryQueryResp.class);

        // 将PageInfo对象中的数据封装到PageResp对象中
        PageResp<CategoryQueryResp> pageResp = new PageResp<>();
        pageResp.setTotal(categoryPageInfo.getTotal());
        pageResp.setList(list);

        return pageResp;

    }

    /**
     * 查询所有分类数据。前端要展示树形表格，所有要查所有
     * @param
     * @return
     */
    @Override
    public List<CategoryQueryResp> all() {
        // 创建一个条件查询
        CategoryExample categoryExample = new CategoryExample();
        // 设置排序:按sort字段升序排序
        categoryExample.setOrderByClause("sort asc");

        List<Category> categorys = categoryMapper.selectByExample(categoryExample);

        // 将Category对象列表转换为CategoryQueryResp对象列表
        List<CategoryQueryResp> list = CopyUtil.copyList(categorys, CategoryQueryResp.class);

        return list;
    }

    /**
     * 保存电子书(新增或者修改)
     * @param categoryQueryReq
     */
    @Override
    public void save(CategorySaveReq categoryQueryReq) {
        Category category = CopyUtil.copy(categoryQueryReq, Category.class);
        if(ObjectUtils.isEmpty(category.getId())){
            // 如果id为空，则新增
            category.setId(snowFlake.nextId());
            categoryMapper.insert(category);
        }else{
            // 如果id不为空，则修改
            categoryMapper.updateByPrimaryKey(category);
        }
    }

    @Override
    public void delete(Long id) {
        categoryMapper.deleteByPrimaryKey(id);
    }
}
